package cn.dengta.webapp.trade.service;

import java.util.Arrays;
import java.util.List;
import javax.annotation.Resource;

import cn.dengta.common.model.Status;
import cn.dengta.context.model.WesKit;
import cn.dengta.webapp.base.service.BaseServiceImpl;
import cn.dengta.webapp.trade.dao.WesKitConfigDao;
import cn.dengta.webapp.trade.entity.Meta;
import cn.dengta.webapp.trade.entity.WesKitConfig;
import cn.dengta.webapp.trade.vo.WesKitConfigVO;
import cn.dengta.webapp.user.model.MetaType;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import me.codeplayer.util.*;
import org.apache.dubbo.config.annotation.DubboService;

/**
 * 分包配置 服务实现类
 *
 * @author hsj
 * @since 2024-01-03
 */
@DubboService
@Slf4j
public class WesKitConfigService extends BaseServiceImpl<WesKitConfig, WesKitConfigDao, Long> implements RemoteWesKitConfigSyncService {

	@Resource
	MetaService metaService;
	LazyCacheLoader<WesKitConfigVO> cacheLoader = new TimeBasedCacheLoader<>(EasyDate.MILLIS_OF_DAY, this::load);

	public WesKitConfigVO load() {
		List<Integer> wesKits = Arrays.stream(WesKit.CACHE).map(WesKit::getValue).toList();
		List<WesKitConfig> wesKitConfigs = this.selectList(new QueryWrapper<WesKitConfig>()
				.in(WesKitConfig.WES_KIT, wesKits)
		);
		List<Meta> metas = metaService.find(MetaType.wesKitsSwitch);
		Assert.isTrue(X.isValid(metas), "前置数据未配置");
		return WesKitConfigVO.from(Status.asResult(Integer.parseInt(metas.get(0).getValue())), wesKitConfigs);

	}

	public WesKitConfigVO getCache() {
		return cacheLoader.get();
	}

	@Override
	public void flushCache() {
		log.info("flush 分包配置数据");
		cacheLoader.flush(false);
	}

}
